package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import bean.clienteBean;

public class clienteDao {
	
	/*
	 * cadastrarClienteServlet
	 */
	public void inserir(Connection conn, clienteBean cliente) throws SQLException {

		String sql = "insert into cliente(" +
				"nome, " +
				"endereco, " +
				"numero, " +
				"bairro, " +
				"idcidade, " +
				"cpf, " +
				"cnpj, " +
				"telefone, " +
				"celular, " +
				"situacao, " +
				"observacao, " +
				"data, " +
				"idempresa, " +
				"idfuncionario" +
				") " +
				"values(" +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?," +
				"?"+
				")";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, cliente.getNome());
		ps.setString(2, cliente.getEndereco());
		ps.setInt(3, cliente.getNumero());
		ps.setString(4, cliente.getBairro());
		ps.setInt(5, cliente.getIdCidade());
		ps.setString(6, cliente.getCpf());
		ps.setString(7, cliente.getCnpj());
		ps.setString(8, cliente.getTelefone());
		ps.setString(9, cliente.getCelular());
		ps.setString(10, cliente.getSituacao());
		ps.setString(11, cliente.getObservacao());
		ps.setTimestamp(12, cliente.getData());
		ps.setInt(13, cliente.getIdEmpresa());
		ps.setInt(14, cliente.getIdFuncionario());
		ps.execute();
		ps.close();
	}

	public void alterar(Connection conn, clienteBean cliente) throws SQLException {

		String sql = "update cliente set " +
				"nome = ?," +
				"endereco = ?, " +
				"numero = ?, " +
				"bairro = ?, " +
				"idcidade = ?, " +
				"cpf = ?, " +
				"cnpj = ?, " +
				"telefone = ?, " +
				"celular = ?, " +
				"situacao = ?, " +
				"observacao = ?, " +
				"idFuncionario = ?" +
				" where id = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, cliente.getNome());
		ps.setString(2, cliente.getEndereco());
		ps.setInt(3, cliente.getNumero());
		ps.setString(4, cliente.getBairro());
		ps.setInt(5, cliente.getIdCidade());
		ps.setString(6, cliente.getCpf());
		ps.setString(7, cliente.getCnpj());
		ps.setString(8, cliente.getTelefone());
		ps.setString(9, cliente.getCelular());
		ps.setString(10, cliente.getSituacao());
		ps.setString(11, cliente.getObservacao());
		ps.setInt(12, cliente.getIdFuncionario());
		ps.setInt(13, cliente.getId());
		ps.execute();
		ps.close();
	}

	public void remover(Connection conn, clienteBean cliente) throws SQLException{

		String sql = "delete from cliente where id = ?";
	
		PreparedStatement ps;
	
		ps = conn.prepareStatement(sql);
		ps.setInt(1, cliente.getId());
		ps.execute();
		ps.close();
		
	}
	
	public void exclucaoLogica(Connection conn, clienteBean cliente) throws SQLException {
		
		String sql = "update cliente set excluido = '1' where id = ?";
		
		PreparedStatement ps;
	
		ps = conn.prepareStatement(sql);
		ps.setInt(1, cliente.getId());
		ps.execute();
		ps.close();
		
	}	

	/*
	 * atualizaSelectCliente.jsp
	 * alterarOS.jsp
	 * cadastrarOS.jsp
	 * relatorio.jsp
	 */
	public ArrayList<clienteBean> getLista(Connection conn, clienteBean cli) throws SQLException {

		String sql = "select * from cliente where excluido = '0' and idempresa = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, cli.getIdEmpresa());

		ResultSet rs = ps.executeQuery();
		ArrayList<clienteBean> clientes = new ArrayList<clienteBean>();
		while (rs.next()) {
			clienteBean cliente = new clienteBean();
			cliente.setId(rs.getInt("id"));
			cliente.setNome(rs.getString("nome"));
			cliente.setEndereco(rs.getString("endereco"));
			cliente.setNumero(rs.getInt("numero"));
			cliente.setBairro(rs.getString("bairro"));
			cliente.setIdCidade(rs.getInt("idcidade"));
			cliente.setCpf(rs.getString("cpf"));
			cliente.setCnpj(rs.getString("cnpj"));
			cliente.setTelefone(rs.getString("telefone"));
			cliente.setCelular(rs.getString("celular"));
			cliente.setSituacao(rs.getString("situacao"));
			cliente.setObservacao(rs.getString("observacao"));
			cliente.setData(rs.getTimestamp("data"));
			cliente.setIdFuncionario(rs.getInt("idfuncionario"));
			clientes.add(cliente);
		}
		ps.close();
		rs.close();

		return clientes;

	}
	
	/*
	 * atualizaTabelaCliente.jsp
	 * 
	 */
	public ArrayList<clienteBean> getAll(Connection conn, clienteBean cli) throws SQLException {

		String sql =    "select												" +
						"	cl.id as idcliente, 							" +
						"	cl.nome as nomecliente,							" +
						"	cl.cpf,											" +
						"	cl.cnpj,										" +
						"	cl.telefone,									" +
						"	cl.celular,										" +
						"	cl.data,										" +
						"	ci.nome as nomecidade,							" +
						"	fu.nome as nomefuncionario						" +
						"from												" +
						"	cliente cl,										" +
						"	cidade ci,										" +
						"	funcionario fu									" +
						"where												" +
						"	cl.idcidade = ci.id								" +
						"and												" +
						"	cl.idfuncionario = fu.id						" +
						"and												" +
						"	cl.excluido = '0'								" +
						"and												" +
						"	cl.idempresa = ?								" +
						"order by											" +
						"	cl.id											";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, cli.getIdEmpresa());

		ResultSet rs = ps.executeQuery();
		ArrayList<clienteBean> clientes = new ArrayList<clienteBean>();
		while (rs.next()) {
			clienteBean cliente = new clienteBean();
			cliente.setId(rs.getInt("idcliente"));
			cliente.setNome(rs.getString("nomecliente"));
			cliente.setNomeCidade(rs.getString("nomecidade"));
			cliente.setCpf(rs.getString("cpf"));
			cliente.setCnpj(rs.getString("cnpj"));
			cliente.setTelefone(rs.getString("telefone"));
			cliente.setCelular(rs.getString("celular"));
			cliente.setData(rs.getTimestamp("data"));
			cliente.setNomeFuncionario(rs.getString("nomefuncionario"));
			clientes.add(cliente);
		}
		ps.close();
		rs.close();

		return clientes;

	}

	/*
	 * detalheOsServlet
	 */
	public clienteBean getcliente(Connection conn, clienteBean clienteBean)
			throws SQLException {

		String sql = "select cli.id as idcliente," +
				" cli.nome as nomecliente," +
				" cli.endereco," +
				" cli.numero," +
				" cli.bairro," +
				" cli.cpf," +
				" cli.cnpj," +
				" cli.telefone," +
				" cli.celular," +
				" cli.situacao," +
				" cli.observacao," +
				" cli.data," +
				" cli.idfuncionario," +
				" cli.idcidade," +
				" cid.nome as nomecidade" +
				" from cliente cli, cidade cid " +
				"where cli.id = ? and cli.idcidade = cid.id";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, clienteBean.getId());

		ResultSet rs = ps.executeQuery();

		clienteBean cliente = new clienteBean();
		if(rs.next()){
		cliente.setId(rs.getInt("idcliente"));
		cliente.setNome(rs.getString("nomecliente"));
		cliente.setEndereco(rs.getString("endereco"));
		cliente.setNumero(rs.getInt("numero"));
		cliente.setBairro(rs.getString("bairro"));
		cliente.setIdCidade(rs.getInt("idcidade"));
		cliente.setNomeCidade(rs.getString("nomecidade"));
		cliente.setCpf(rs.getString("cpf"));
		cliente.setCnpj(rs.getString("cnpj"));
		cliente.setTelefone(rs.getString("telefone"));
		cliente.setCelular(rs.getString("celular"));
		cliente.setSituacao(rs.getString("situacao"));
		cliente.setObservacao(rs.getString("observacao"));
		cliente.setData(rs.getTimestamp("data"));
		cliente.setIdFuncionario(rs.getInt("idfuncionario"));
		}
		ps.close();
		rs.close();

		return cliente;

	}
	
	/*
	 * cadastrarClienteServlet
	 */
	public boolean cpfCadastrado(Connection conn, clienteBean cli) throws SQLException{
		
		String sql = "select cpf from cliente where cpf = ? and idempresa = ? and excluido = '0'";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, cli.getCpf());
		ps.setInt(2, cli.getIdEmpresa());
		
		ResultSet rs = ps.executeQuery();
		
		if(rs.next()){
			return true;
		}
		
		ps.close();
		rs.close();
		
		return false;
	}

	/*
	 * cadastrarClienteServlet
	 */
	public boolean cnpjCadastrado(Connection conn, clienteBean cli) throws SQLException {
		
		String sql = "select cnpj from cliente where cnpj = ? and idempresa = ? and excluido = '0'";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, cli.getCnpj());
		ps.setInt(2, cli.getIdEmpresa());
		
		ResultSet rs = ps.executeQuery();
		
		if(rs.next()){
			return true;
		}
		
		ps.close();
		rs.close();
		
		return false;
	}

}
